// Generated from code/ch25/Pie.g by ANTLR 4.9.0-SNAPSHOT


import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor";

import { AddExprContext } from "./PieParser";
import { SubExprContext } from "./PieParser";
import { SimpleVarContext } from "./PieParser";
import { FieldVarContext } from "./PieParser";
import { StructDefStatementContext } from "./PieParser";
import { AssignStatementContext } from "./PieParser";
import { ReturnStatementContext } from "./PieParser";
import { PrintStatementContext } from "./PieParser";
import { IfStatementContext } from "./PieParser";
import { WhileStatementContext } from "./PieParser";
import { CallStatementContext } from "./PieParser";
import { EmptyStatementContext } from "./PieParser";
import { EqExprContext } from "./PieParser";
import { LtExprContext } from "./PieParser";
import { ProgramContext } from "./PieParser";
import { AtomContext } from "./PieParser";
import { MulexprContext } from "./PieParser";
import { AddexprContext } from "./PieParser";
import { ExprContext } from "./PieParser";
import { StatementContext } from "./PieParser";
import { SlistContext } from "./PieParser";
import { StructDefinitionContext } from "./PieParser";
import { VardefContext } from "./PieParser";
import { InstanceContext } from "./PieParser";
import { QidContext } from "./PieParser";
import { FunctionDefinitionContext } from "./PieParser";
import { CallContext } from "./PieParser";


/**
 * This interface defines a complete generic visitor for a parse tree produced
 * by `PieParser`.
 *
 * @param <Result> The return type of the visit operation. Use `void` for
 * operations with no return type.
 */
export interface PieVisitor<Result> extends ParseTreeVisitor<Result> {
	/**
	 * Visit a parse tree produced by the `addExpr`
	 * labeled alternative in `PieParser.addexpr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitAddExpr?: (ctx: AddExprContext) => Result;

	/**
	 * Visit a parse tree produced by the `subExpr`
	 * labeled alternative in `PieParser.addexpr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitSubExpr?: (ctx: SubExprContext) => Result;

	/**
	 * Visit a parse tree produced by the `simpleVar`
	 * labeled alternative in `PieParser.qid`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitSimpleVar?: (ctx: SimpleVarContext) => Result;

	/**
	 * Visit a parse tree produced by the `fieldVar`
	 * labeled alternative in `PieParser.qid`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitFieldVar?: (ctx: FieldVarContext) => Result;

	/**
	 * Visit a parse tree produced by the `structDefStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitStructDefStatement?: (ctx: StructDefStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `assignStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitAssignStatement?: (ctx: AssignStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `returnStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitReturnStatement?: (ctx: ReturnStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `printStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitPrintStatement?: (ctx: PrintStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `ifStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitIfStatement?: (ctx: IfStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `whileStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitWhileStatement?: (ctx: WhileStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `callStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitCallStatement?: (ctx: CallStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `emptyStatement`
	 * labeled alternative in `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitEmptyStatement?: (ctx: EmptyStatementContext) => Result;

	/**
	 * Visit a parse tree produced by the `eqExpr`
	 * labeled alternative in `PieParser.expr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitEqExpr?: (ctx: EqExprContext) => Result;

	/**
	 * Visit a parse tree produced by the `ltExpr`
	 * labeled alternative in `PieParser.expr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitLtExpr?: (ctx: LtExprContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.program`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitProgram?: (ctx: ProgramContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.atom`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitAtom?: (ctx: AtomContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.mulexpr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitMulexpr?: (ctx: MulexprContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.addexpr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitAddexpr?: (ctx: AddexprContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.expr`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitExpr?: (ctx: ExprContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.statement`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitStatement?: (ctx: StatementContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.slist`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitSlist?: (ctx: SlistContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.structDefinition`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitStructDefinition?: (ctx: StructDefinitionContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.vardef`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitVardef?: (ctx: VardefContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.instance`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitInstance?: (ctx: InstanceContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.qid`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitQid?: (ctx: QidContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.functionDefinition`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitFunctionDefinition?: (ctx: FunctionDefinitionContext) => Result;

	/**
	 * Visit a parse tree produced by `PieParser.call`.
	 * @param ctx the parse tree
	 * @return the visitor result
	 */
	visitCall?: (ctx: CallContext) => Result;
}

